package com.ProtocalAndUdp;
import android.text.format.Time;

/*
 * 报文解析类
 * 作者：马浩
 * 
 */
public class PackAnalysis {
//	/**
//	 * 发送数据包到设备
//	 * @param protacalType
//	 * @param content
//	 * @return
//	 */
//	public static byte[] GetSendDatasPack(ProtocalType protocolType,String content){
//		
//		 byte[]bt=null;
//		 if(protocolType==ProtocalType.RunParamter){
//			 
//		 }
//		 return bt;
//	}
	
	/**
	 * 发送数据包到设备
	 * @param type 类型
	 * @param protocol 协议类型
	 * @param content 内容
	 * @return
	 */
	public static byte[] GetSendDatasPack(String type, String protocol,String content ){
		 byte[]bt=null;
		if(type.length()==2&&protocol.length()==2){
			String s=null;
			s=type+protocol+content;
			bt=StrToHexByte(s);
		}
		 return bt;
	}
	
     /** 将需解析的以十六进制形式的字符串转换成二字节拆分反向处理后字节数组
      * @param str
      * @return
      */
	private static byte[] StrToHexByte(String str)
     {
         byte[]bt=str.getBytes();
         byte[] myBt = ToHexByte(bt);//二字节拆分反向处理
         return myBt;
     }
     
     /**
      * 2字节拆分规则解析,将拆分的ASCII字符转化为原16进制字节数据
      * @param str
      * @return
      **/ 
     private static byte[] ToHexByte(byte[] bytes)
     {
         byte[] bt = new byte[bytes.length / 2];
         for (int i = 0; i < bytes.length - 1; i += 2)
         {
             //判断第一个字节
             if ((bytes[i] - 0x30) >= 0x00
                 &&
                 (bytes[i] - 0x30) <= 0x09)
                 bytes[i] = (byte)(bytes[i] - 0x30);
             if ((bytes[i] - 0x37) >= 0x0A
                 &&
                 (bytes[i] - 0x37) <= 0x0F)
                 bytes[i] = (byte)(bytes[i] - 0x37);
             //判断第二个字节
             if ((bytes[i + 1] - 0x30) >= 0x00
                 &&
                 (bytes[i + 1] - 0x30) <= 0x09)
                 bytes[i + 1] = (byte)(bytes[i + 1] - 0x30);
             if ((bytes[i + 1] - 0x37) >= 0x0A
                 &&
                 (bytes[i + 1] - 0x37) <= 0x0F)
                 bytes[i + 1] = (byte)(bytes[i + 1] - 0x37);
             //组合两个字符为一个字节
             bt[i / 2] = (byte)((bytes[i] << 4) + bytes[i + 1]);
         }
         return bt;
     }
     
    /**
     * 将一个字节拆分成两个字节
     * @param bytes
     * @return
     */
     private static byte[] ToHexInt(byte[] bytes)
     {
         byte[] bt = new byte[bytes.length * 2];
         for (int i = 0; i < bytes.length * 2 - 1; i += 2)
         {
             if ((bytes[i / 2] & 0xF0) >> 4 >= 0x00
                 &&
                 (bytes[i / 2] & 0xF0) >> 4 <= 0x09)
             {
                 bt[i] = (byte)((byte)((bytes[i / 2] & 0xF0) >> 4) + 0x30);//先与，移位
             }
             if ((bytes[i / 2] & 0xF0) >> 4 >= 0x0A
                 &&
                 (bytes[i / 2] & 0xF0) >> 4 <= 0x0F)
             {
                 bt[i] = (byte)((byte)((bytes[i / 2] & 0xF0) >> 4) + 0x37);
             }
             if ((bytes[i / 2] & 0x0F) >= 0x00
                 &&
                 (bytes[i / 2] & 0x0F) <= 0x09)
             {
                 bt[i + 1] = (byte)((byte)((bytes[i / 2] & 0x0F)) + 0x30);
             }
             if ((bytes[i / 2] & 0x0F) >= 0x0A
                 &&
                 (bytes[i / 2] & 0x0F) <= 0x0F)
             {
                 bt[i + 1] = (byte)((byte)((bytes[i / 2] & 0x0F)) + 0x37);
             }

         }
         return bt;
     }

     /**
      * 解析接收数据
      */
    public static PackRezult ReceiveData(String str)
     {
    	 PackRezult rezult=new PackRezult();
             try
             {
            	 String context =null;
            	 if(str.length()>4)
            		 context = str.substring(4);//数据包内容
                 String strtype=str.substring(0,4);//数据包类型
                 //设置内容
                 rezult.setId(strtype); 
            	 rezult.setContent(context);
             }
             catch (Exception ex)
             {
             }
             return rezult;
     }

    /**
     * 基站状态上报内容解析
     * @param revPack 接收数据包
     * @return
     */
	public static String[] pack0309(PackRezult revPack) {
		String context=revPack.getContent();
		 String[] strtemp = context.split("#");
		 return strtemp;
	}

    /**
     * 基站上报驱赶手机信息数据包解析
     * @param str
     */
	public static String[] pack0324(PackRezult revPack) {
		String context =revPack.getContent();
		 String[] strtemp = context.split("#");
		 String[] stritems = new String[5];
		 stritems[0] = strtemp[0];
		 stritems[1] = strtemp[1];
		 stritems[2] = "1";
		 stritems[3] = "中标";
		 stritems[4] =Util.getNowTime();
		 return stritems;
	}
	/**
	 * 设定设备运行参数请求包内容
	 * @param contents
	 * @return
	 */
	public static String sendContent0301(String[] contents){
		String s=null;
		for(int i=0;i<contents.length;i++){
			s+=contents[i]+"@";
		}
		return s;
	}
	
	/**
	 * 设定设备IP修改请求包内容
	 * @param contents
	 * @return
	 */
	public static String sendContent0320(String[] contents){
		String s=null;
		for(int i=0;i<contents.length;i++){
			s+=contents[i]+"#";
		}
		return s;
	}
	/**
	 * 设置2G模块信息包内容
	 * @param contents
	 * @return
	 */
	public static String sendContent0614(String[] contents){
		String s=null;
		if(contents.length==2){
			s=contents[0]+"#"+contents[1]+"@";
		}
		return s;
	}
}

